/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bean;

import datos.Contrato;
import datos.EmpresaContratista;
import datos.Obra;
import datos.Programacion;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import negocio.GestorConsultaObraLocal;
import negocio.GestorObraLocal;
import negocio.GestorProgramaLocal;
import negocio.GestorProgramacionLocal;
import negocio.GestorTipoObraLocal;

/**
 *
 * @author Ing. Monica Merlo, Ing. Agustin  Fernandez
 */
public class ObraPublicaBean {

    @EJB(beanName = "GestorConsultaObraBean")
    private GestorConsultaObraLocal gestorConsultaObraBean;
    @EJB(beanName = "GestorTipoObraBean")
    private GestorTipoObraLocal gestorTipoObraBean;
    @EJB(beanName = "GestorProgramaBean")
    private GestorProgramaLocal gestorProgramaBean;
    @EJB(beanName = "GestorObraBean")
    private GestorObraLocal gestorObraBean;
    @EJB(beanName = "GestorProgramacionBean")
    private GestorProgramacionLocal gestorProgramacionBean;
    private int id;
    private String codigo;
    private String nombre;
    private Date fechaInicioEstimada;
    private Date fechaInicioReal;
    private Date fechaFinEstimada;
    private Date fechaFinReal;
    private int numeroExpediente;
    private String descripcion;
    private BigDecimal montoTotal;
    private BigDecimal anticipoFinanciero;
    private String observaciones;
    private String nroResolucion;
    private String fondos;
    private String estado;
    private String modalidadContratacion;
    private String programa;
    private String tipoObra;
    private String subtipoObra;
    private int idTipoObra = -1;
    private int idSubtipoObra = -1;
    private List<String> subtiposObra = null;
    /**
     * Solo para filtrar por el nombre de la obra. Usado en 
     * obraPublica.jsp
     */
    private List obrasPublicasFiltradasPorNombre = null;
    private boolean filtroAplicadoPorNombre = false;
    /**
     * Solo para filtrar por las caracteristicas de la obra. Usado en
     * consultaObraPublica.jsp
     */
    private List obrasPublicasFiltradas = null;
    private boolean filtroAplicado = false;
    private String montoParaFiltro = "";
    private String tabSeleccionado = "obra"; //obra ,empresa, encargado, certificaciones
    private boolean tabObraDesactivo = false;
    private boolean tabGeoDesactivo = true;
    private boolean tabEmpresaDesactivo = true;
    private boolean tabEncargadoDesactivo = true;
    private boolean tabFotosDesactivo = true;
    private boolean tabProgramacionDesactivo = true;
    private boolean tabCertificadosDesactivo = true;
    private boolean tabPagosDesactivo = true;
    private boolean agregarObra = false;
    private String alerta;

    /** Creates a new instance of ObraPublicaBean */
    public ObraPublicaBean() {
    }

    public void activarTabObra(ActionEvent e) {
        this.setTabObraDesactivo(false);
    }

    public void activarTabGeo(ActionEvent e) {
        this.setTabGeoDesactivo(false);
    }

    public void activarTabEmpresa(ActionEvent e) {
        this.setTabEmpresaDesactivo(false);
    }

    public void activarTabEncargado(ActionEvent e) {
        this.setTabEncargadoDesactivo(false);
    }

    public boolean getPuedeGuardarNuevaObra() {
        boolean resp = !this.isTabObraDesactivo() && !this.isTabGeoDesactivo() && !this.isTabEmpresaDesactivo() && !this.isTabEncargadoDesactivo();
        return resp;
    }

    /**
     *
     * @param e
     */
    public void guardarObraPublicaOyente(ActionEvent e) {
        this.setAgregarObra(true);
        this.setTabPagosDesactivo(true);
        this.setTabCertificadosDesactivo(true);
        this.setTabGeoDesactivo(true);
        this.setTabEmpresaDesactivo(true);
        this.setTabEncargadoDesactivo(true);
        this.setTabFotosDesactivo(true);
        this.setTabObraDesactivo(false);
        this.setTabSeleccionado("obra");
        this.setId(-1);
        this.setAnticipoFinanciero(new BigDecimal("0.00"));
        this.setCodigo("");
        this.setDescripcion("");

        this.setEstado("");

        this.setFechaFinEstimada(null);
        this.setFechaFinReal(null);
        this.setFechaInicioEstimada(null);
        this.setFechaInicioReal(null);
        this.setModalidadContratacion("");

        this.setMontoTotal(new BigDecimal("0.00"));
        this.setNombre("");
        this.setNumeroExpediente(0);
        this.setObservaciones("");
        this.setNroResolucion("");
        this.setFondos("");
        this.setPrograma("");
        this.setTipoObra("");
        this.setIdTipoObra(-1);
        this.setSubtipoObra("");
        this.setIdSubtipoObra(-1);


        FacesContext context = FacesContext.getCurrentInstance();
        ResponsableObraBean responsableBean = (ResponsableObraBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "ResponsableObraBean");
        EmpresaBean empresaBean = (EmpresaBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "EmpresaBean");
        GeolocalizacionBean geolocalizacionBean = (GeolocalizacionBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "GeolocalizacionBean");
        FotoBean fotoBean = (FotoBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "FotoBean");
        fotoBean.setIdObra(this.id);
        ProgramacionBean programacionBean = (ProgramacionBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "ProgramacionBean");
        programacionBean.setIdObra(this.id);
        CertificadoBean certificadoBean = (CertificadoBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "CertificadoBean");
        certificadoBean.setIdObra(this.id);
        PagosBean pagoBean = (PagosBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "PagosBean");
        pagoBean.setIdObra(this.id);

        responsableBean.setNombre("");
        responsableBean.setApellido("");

        responsableBean.setBarrio("");
        responsableBean.setCalle("");
        responsableBean.setCodPostal("");
        responsableBean.setDepto("");
        responsableBean.setNumero("");
        responsableBean.setPiso(0);

        responsableBean.setNumeroDocumento(0);
        responsableBean.setTipoDocumento("DNI");

        empresaBean.setCuit("");
        empresaBean.setEmail("");
        empresaBean.setPaginaWeb("");
        empresaBean.setTelefono("");
        empresaBean.setRazonSocial("");

        empresaBean.setBarrio("");
        empresaBean.setCalle("");
        empresaBean.setCodPostal("");
        empresaBean.setDepto("");
        empresaBean.setNumero("");
        empresaBean.setPiso(0);

        empresaBean.setPais("");

        empresaBean.setTituloContrato("");
        empresaBean.setPlazoContrato("");
        empresaBean.setTipoPlazoContrato("DIAS");
        empresaBean.setFechaContrato(null);
        empresaBean.setObservacionesContrato("");
        empresaBean.setPeriodoCertificacionContrato("");

        geolocalizacionBean.setBarrio("");
        geolocalizacionBean.setCalle("");
        geolocalizacionBean.setNroCalle("");
        geolocalizacionBean.setLocalidad("");
        geolocalizacionBean.setLocalidadEnc("");
        geolocalizacionBean.setIdLocalidad(-1);
        geolocalizacionBean.setIdLocalidadEnc(-1);
        geolocalizacionBean.setDepartamento("");
        geolocalizacionBean.setDepartamentoEnc("");
        geolocalizacionBean.setIdDepartamento(-1);
        geolocalizacionBean.setIdDepartamentoEnc(-1);
        geolocalizacionBean.setProvincia("");
        geolocalizacionBean.setProvinciaEnc("");
        geolocalizacionBean.setIdProvincia(-1);
        //.setIdDepartamento(-1);
        geolocalizacionBean.setIdProvinciaEnc(-1);
        geolocalizacionBean.setPais("");
        geolocalizacionBean.setIdPais(-1);
        geolocalizacionBean.setIdPaisEnc(-1);
        geolocalizacionBean.setPaisEnc("");
        geolocalizacionBean.setLatitud("-31.409912194070973");
        geolocalizacionBean.setLongitud("-64.2041015625");
        geolocalizacionBean.setZoom(5);
        geolocalizacionBean.setTipoGeocoding("geoinverso");

    }

    /**
     *
     * @return
     */
    public String guardarObraPublica() {
        boolean existe = this.gestorObraBean.existeCodigoObra(this.getCodigo().toUpperCase());
        FacesContext context = FacesContext.getCurrentInstance();
        if (!existe) {
            if (this.fechaInicioReal.before(this.fechaFinReal)) {
                ResponsableObraBean responsableBean = (ResponsableObraBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "ResponsableObraBean");
                EmpresaBean empresaBean = (EmpresaBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "EmpresaBean");
                GeolocalizacionBean geolocalizacionBean = (GeolocalizacionBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "GeolocalizacionBean");

                this.id = this.gestorObraBean.agregarObra(codigo.toUpperCase(), montoTotal, descripcion.toUpperCase(),
                        fechaInicioEstimada, fechaInicioReal, fechaFinEstimada, fechaFinReal,
                        estado.toUpperCase(), modalidadContratacion.toUpperCase(), programa.toUpperCase(), idTipoObra, idSubtipoObra, montoTotal,
                        nombre.toUpperCase(), numeroExpediente, observaciones.toUpperCase(),
                        nroResolucion, fondos, empresaBean.getCuit(), empresaBean.getEmail(), empresaBean.getPaginaWeb(), empresaBean.getTelefono(),
                        empresaBean.getRazonSocial(), empresaBean.getPais(), empresaBean.getBarrio(),
                        empresaBean.getCalle(), empresaBean.getCodPostal(), empresaBean.getDepto(), empresaBean.getNumero(),
                        empresaBean.getPiso(), responsableBean.getApellido(), responsableBean.getNombre(),
                        responsableBean.getNumeroDocumento(), responsableBean.getTipoDocumento(), responsableBean.getBarrio(),
                        responsableBean.getCalle(), responsableBean.getCodPostal(), responsableBean.getDepto(), responsableBean.getNumero(),
                        responsableBean.getPiso(), empresaBean.getFechaContrato(), empresaBean.getTituloContrato().toUpperCase(),
                        empresaBean.getPlazoContrato().toUpperCase(), empresaBean.getTipoPlazoContrato().toUpperCase(), empresaBean.getPeriodoCertificacionContrato().toUpperCase(),
                        empresaBean.getObservacionesContrato().toUpperCase(), geolocalizacionBean.getCalle().toUpperCase(), geolocalizacionBean.getNroCalle().trim(),
                        geolocalizacionBean.getBarrio().toUpperCase(), geolocalizacionBean.getIdLocalidad(), geolocalizacionBean.getLatitud(), geolocalizacionBean.getLongitud(),
                        geolocalizacionBean.getZoom(), geolocalizacionBean.getIdLocalidadEnc(), geolocalizacionBean.getIdPaisEnc());

                this.setAgregarObra(false);
                FotoBean fotoBean = (FotoBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "FotoBean");
                fotoBean.setIdObra(this.id);
                ProgramacionBean programacionBean = (ProgramacionBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "ProgramacionBean");
                programacionBean.setIdObra(this.id);
                CertificadoBean certificadoBean = (CertificadoBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "CertificadoBean");
                certificadoBean.setIdObra(this.id);
                PagosBean pagoBean = (PagosBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "PagosBean");
                pagoBean.setIdObra(this.id);
                Obra obra = this.gestorObraBean.encontrarObraPublicaPorId(this.getId());
                int idEmpresa = obra.getIdEmpresa().getId();
                programacionBean.setIdEmpresaContratista(idEmpresa);
                certificadoBean.setIdEmpresaContratista(idEmpresa);
                pagoBean.setIdEmpresaContratista(idEmpresa);
                fotoBean.setIdEmpresaContratista(idEmpresa);
                context.addMessage(null, new FacesMessage("Obra Publica guardada con exito", ""));
                return null;
            } else {
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "La fecha de finalización de obra debe ser mayor que la fecha de inicio", ""));
                this.setTabEmpresaDesactivo(true);
                this.setTabEncargadoDesactivo(true);
                this.setTabObraDesactivo(false);
                this.setTabSeleccionado("obra");
                return null;
            }
        } else {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ya existe una Obra Publica con ese codigo", ""));
            this.setTabEmpresaDesactivo(true);
            this.setTabEncargadoDesactivo(true);
            this.setTabObraDesactivo(false);
            this.setTabSeleccionado("obra");
            return null;
        }

    }

    /**
     *
     * @param e
     */
    public void modificarObraPublicaOyente(ActionEvent e) {
        this.setAgregarObra(false);
        this.setTabCertificadosDesactivo(true);
        this.setTabProgramacionDesactivo(true);
        this.setTabFotosDesactivo(true);
        this.setTabGeoDesactivo(true);
        this.setTabEmpresaDesactivo(true);
        this.setTabEncargadoDesactivo(true);
        this.setTabObraDesactivo(false);
//        this.setTabSeleccionado("obra");
        Integer atributoId = (Integer) e.getComponent().getAttributes().get("idModificar");
        this.setId(atributoId.intValue());
        String atributoTab = (String) e.getComponent().getAttributes().get("tabSeleccionado");
        this.setTabSeleccionado(atributoTab);
        Obra obra = this.gestorObraBean.encontrarObraPublicaPorId(this.getId());
        this.setAnticipoFinanciero(obra.getAnticipoFinanciero());
        this.setCodigo(obra.getCodigo());
        this.setDescripcion(obra.getDescripcion());
        if (obra.getIdEstado() != null) {
            this.setEstado(obra.getIdEstado().getNombre());
        } else {
            this.setEstado("");
        }
        this.setFechaFinEstimada(obra.getFechaFinEstimada());
        this.setFechaFinReal(obra.getFechaFinReal());
        this.setFechaInicioEstimada(obra.getFechaInicioEstimada());
        this.setFechaInicioReal(obra.getFechaInicioReal());
        this.setId(obra.getId());
        if (obra.getIdModalidadContratacion() != null) {
            this.setModalidadContratacion(obra.getIdModalidadContratacion().getNombre());
        } else {
            this.setModalidadContratacion("");
        }
        this.setMontoTotal(obra.getMontoTotal());
        this.setNombre(obra.getNombre());
        this.setNumeroExpediente(obra.getNumeroExpediente());
        this.setObservaciones(obra.getObservaciones());
        this.setNroResolucion(obra.getNroResolucion());
        this.setFondos(obra.getFondos());
        if (obra.getIdPrograma() != null) {
            this.setPrograma(obra.getIdPrograma().getNombre());
        } else {
            this.setPrograma("");
        }

        if (obra.getIdTipoObra() != null) {
            this.setTipoObra(obra.getIdTipoObra().getNombre());
            this.setIdTipoObra(obra.getIdTipoObra().getId());
        } else {
            this.setTipoObra("");
            this.setIdTipoObra(-1);
        }

        if (obra.getIdSubtipoObra() != null) {
            this.setSubtipoObra(obra.getIdSubtipoObra().getNombre());
            this.setIdSubtipoObra(obra.getIdSubtipoObra().getId());
        } else {
            this.setSubtipoObra("");
            this.setIdSubtipoObra(-1);
        }

        FacesContext context = FacesContext.getCurrentInstance();
        ResponsableObraBean responsableBean = (ResponsableObraBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "ResponsableObraBean");
        EmpresaBean empresaBean = (EmpresaBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "EmpresaBean");
        GeolocalizacionBean geolocalizacionBean = (GeolocalizacionBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "GeolocalizacionBean");
        FotoBean fotoBean = (FotoBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "FotoBean");
        fotoBean.setIdObra(this.id);
        ProgramacionBean programacionBean = (ProgramacionBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "ProgramacionBean");
        programacionBean.setIdObra(this.id);
        CertificadoBean certificadoBean = (CertificadoBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "CertificadoBean");
        certificadoBean.setIdObra(this.id);
        PagosBean pagoBean = (PagosBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "PagosBean");
        pagoBean.setIdObra(this.id);
        int idEmpresa = obra.getIdEmpresa().getId();
        programacionBean.setIdEmpresaContratista(idEmpresa);
        certificadoBean.setIdEmpresaContratista(idEmpresa);
        pagoBean.setIdEmpresaContratista(idEmpresa);
        fotoBean.setIdEmpresaContratista(idEmpresa);

        responsableBean.setId(obra.getIdResponsable().getId());
        responsableBean.setNombre(obra.getIdResponsable().getNombre());
        responsableBean.setApellido(obra.getIdResponsable().getApellido());

        responsableBean.setBarrio(obra.getIdResponsable().getIdDomicilio().getBarrio());
        responsableBean.setCalle(obra.getIdResponsable().getIdDomicilio().getCalle());
        responsableBean.setCodPostal(obra.getIdResponsable().getIdDomicilio().getCodPostal());
        responsableBean.setDepto(obra.getIdResponsable().getIdDomicilio().getDepto());
        responsableBean.setIdDomicilio(obra.getIdResponsable().getIdDomicilio().getId());
        responsableBean.setNumero(obra.getIdResponsable().getIdDomicilio().getNumero());
        responsableBean.setPiso(obra.getIdResponsable().getIdDomicilio().getPiso());

        if (obra.getIdResponsable().getIdDomicilio().getIdLocalidad() != null) {

            responsableBean.setIdLocalidad(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getId());
            responsableBean.setLocalidad(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getNombre());
            geolocalizacionBean.setIdLocalidadEnc(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getId());
            geolocalizacionBean.setLocalidadEnc(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getNombre());
            responsableBean.setIdDepartamento(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getId());
            geolocalizacionBean.setIdDepartamentoEnc(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getId());
            responsableBean.setDepartamento(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getNombre());
            geolocalizacionBean.setDepartamentoEnc(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getNombre());
            responsableBean.setIdProvincia(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getIdProvincia().getId());
            geolocalizacionBean.setIdProvinciaEnc(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getIdProvincia().getId());
            responsableBean.setProvincia(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getIdProvincia().getNombre());
            geolocalizacionBean.setProvinciaEnc(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getIdProvincia().getNombre());
            responsableBean.setIdPais(obra.getIdResponsable().getIdDomicilio().getIdPais().getId());
            responsableBean.setPais(obra.getIdResponsable().getIdDomicilio().getIdPais().getNombre());
            geolocalizacionBean.setIdPaisEnc(obra.getIdResponsable().getIdDomicilio().getIdPais().getId());
            geolocalizacionBean.setPaisEnc(obra.getIdResponsable().getIdDomicilio().getIdPais().getNombre());

        } else {
            responsableBean.setIdLocalidad(-1);
            geolocalizacionBean.setIdLocalidadEnc(-1);
            geolocalizacionBean.setLocalidadEnc("");
            responsableBean.setLocalidad("");
            responsableBean.setIdDepartamento(-1);
            geolocalizacionBean.setIdDepartamentoEnc(-1);
            responsableBean.setDepartamento("");
            geolocalizacionBean.setDepartamentoEnc("");
            responsableBean.setIdProvincia(-1);
            geolocalizacionBean.setIdProvinciaEnc(-1);
            responsableBean.setProvincia("");
            geolocalizacionBean.setProvinciaEnc("");
            responsableBean.setIdPais(-1);
            responsableBean.setPais("");
            geolocalizacionBean.setIdPaisEnc(-1);
            geolocalizacionBean.setPaisEnc("");


        }


        if (obra.getIdResponsable().getIdTipoDocumento() != null) {
            responsableBean.setNumeroDocumento(obra.getIdResponsable().getNumeroDocumento());
            responsableBean.setTipoDocumento(obra.getIdResponsable().getIdTipoDocumento().getTipo());
        } else {
            responsableBean.setNumeroDocumento(0);
            responsableBean.setTipoDocumento("DNI");
        }

        empresaBean.setId(obra.getIdEmpresa().getId());
        empresaBean.setCuit(obra.getIdEmpresa().getCuit());
        empresaBean.setEmail(obra.getIdEmpresa().getEmail());
        empresaBean.setPaginaWeb(obra.getIdEmpresa().getPaginaWeb());
        empresaBean.setTelefono(obra.getIdEmpresa().getTelefono());
        empresaBean.setId(obra.getIdEmpresa().getId());
        empresaBean.setRazonSocial(obra.getIdEmpresa().getRazonSocial());
        empresaBean.setIdDomicilio(obra.getIdEmpresa().getIdDomicilio().getId());

        empresaBean.setBarrio(obra.getIdEmpresa().getIdDomicilio().getBarrio());
        empresaBean.setCalle(obra.getIdEmpresa().getIdDomicilio().getCalle());
        empresaBean.setCodPostal(obra.getIdEmpresa().getIdDomicilio().getCodPostal());
        empresaBean.setDepto(obra.getIdEmpresa().getIdDomicilio().getDepto());
        empresaBean.setNumero(obra.getIdEmpresa().getIdDomicilio().getNumero());
        empresaBean.setPiso(obra.getIdEmpresa().getIdDomicilio().getPiso());
        Contrato contr = this.gestorObraBean.encontrarContratoPorEmpresa(empresaBean.getId(), this.getId());
        if (contr != null) {
            empresaBean.setTituloContrato(contr.getTitulo().toUpperCase());
            empresaBean.setPlazoContrato(contr.getPlazo().toUpperCase());
            empresaBean.setTipoPlazoContrato(contr.getTipoPlazo().toUpperCase());
            empresaBean.setFechaContrato(contr.getFecha());
            empresaBean.setIdContrato(contr.getId());
            empresaBean.setObservacionesContrato(contr.getObservaciones().toUpperCase());
            if (contr.getIdPeriodoCertificacion() != null) {
                empresaBean.setPeriodoCertificacionContrato(contr.getIdPeriodoCertificacion().getNombre().toUpperCase());
            } else {
                empresaBean.setPeriodoCertificacionContrato("");
            }
        } else {
            empresaBean.setTituloContrato("");
            empresaBean.setPlazoContrato("");
            empresaBean.setTipoPlazoContrato("DIAS");
            empresaBean.setFechaContrato(null);
            empresaBean.setObservacionesContrato("");
            empresaBean.setPeriodoCertificacionContrato("");
        }
        if (obra.getIdEmpresa().getIdPais() != null) {
            empresaBean.setPais(obra.getIdEmpresa().getIdPais().getNombre());
        } else {
            empresaBean.setPais("");
        }

        if (obra.getIdLocalizacion() != null) {
            geolocalizacionBean.setLatitud(obra.getIdLocalizacion().getLatitud());
            geolocalizacionBean.setLongitud(obra.getIdLocalizacion().getLongitud());
            geolocalizacionBean.setBarrio(obra.getIdLocalizacion().getBarrio());
            geolocalizacionBean.setCalle(obra.getIdLocalizacion().getCalle());
            geolocalizacionBean.setNroCalle(obra.getIdLocalizacion().getNumero());
            geolocalizacionBean.setPais(obra.getIdLocalizacion().getIdLocalidad().getIdDepartamento().getIdProvincia().getIdPais().getNombre());
            geolocalizacionBean.setIdPais(obra.getIdLocalizacion().getIdLocalidad().getIdDepartamento().getIdProvincia().getIdPais().getId());
            geolocalizacionBean.setProvincia(obra.getIdLocalizacion().getIdLocalidad().getIdDepartamento().getIdProvincia().getNombre());
            geolocalizacionBean.setIdProvincia(obra.getIdLocalizacion().getIdLocalidad().getIdDepartamento().getIdProvincia().getId());
            geolocalizacionBean.setDepartamento(obra.getIdLocalizacion().getIdLocalidad().getIdDepartamento().getNombre());
            geolocalizacionBean.setIdDepartamento(obra.getIdLocalizacion().getIdLocalidad().getIdDepartamento().getId());
            geolocalizacionBean.setLocalidad(obra.getIdLocalizacion().getIdLocalidad().getNombre());
            geolocalizacionBean.setIdLocalidad(obra.getIdLocalizacion().getIdLocalidad().getId());
            geolocalizacionBean.setZoom(obra.getIdLocalizacion().getZoom());
            geolocalizacionBean.setTipoGeocoding("geodirecto");
        } else {
            geolocalizacionBean.setBarrio("");
            geolocalizacionBean.setCalle("");
            geolocalizacionBean.setNroCalle("");
            geolocalizacionBean.setLocalidad("");
            geolocalizacionBean.setIdLocalidad(-1);
            geolocalizacionBean.setDepartamento("");
            geolocalizacionBean.setIdDepartamento(-1);
            geolocalizacionBean.setProvincia("");
            geolocalizacionBean.setIdProvincia(-1);
            geolocalizacionBean.setPais("");
            geolocalizacionBean.setIdPais(-1);
            geolocalizacionBean.setLatitud("-31.409912194070973");
            geolocalizacionBean.setLongitud("-64.2041015625");
            geolocalizacionBean.setZoom(5);
            geolocalizacionBean.setTipoGeocoding("geodirecto");
        }

    }

    /**
     *
     * @return
     */
    public String modificarObraPublica() {
        boolean existeCodigoObra = this.gestorObraBean.existeCodigoObraModificar(this.getCodigo(), this.getId());
        FacesContext context = FacesContext.getCurrentInstance();
        if (!existeCodigoObra) {
            if (this.fechaInicioReal.before(this.fechaFinReal)) {
                ResponsableObraBean responsableBean = (ResponsableObraBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "ResponsableObraBean");
                EmpresaBean empresaBean = (EmpresaBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "EmpresaBean");
                GeolocalizacionBean geolocalizacionBean = (GeolocalizacionBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "GeolocalizacionBean");

                this.gestorObraBean.modificarObra(getId(), getCodigo(), getAnticipoFinanciero(), getDescripcion(),
                        getFechaInicioEstimada(), getFechaInicioReal(), getFechaFinEstimada(), getFechaFinReal(),
                        getEstado(), getModalidadContratacion(), getPrograma(), getIdTipoObra(), getIdSubtipoObra(), getMontoTotal(), getNombre(),
                        getNumeroExpediente(), getObservaciones(), getNroResolucion(), getFondos(), empresaBean.getId(), empresaBean.getCuit(),
                        empresaBean.getEmail(), empresaBean.getPaginaWeb(), empresaBean.getTelefono(), empresaBean.getRazonSocial(), empresaBean.getPais(), empresaBean.getBarrio(),
                        empresaBean.getCalle(), empresaBean.getCodPostal(), empresaBean.getDepto(), empresaBean.getNumero(),
                        empresaBean.getPiso(), responsableBean.getId(), responsableBean.getApellido(), responsableBean.getNombre(),
                        responsableBean.getNumeroDocumento(), responsableBean.getTipoDocumento(), responsableBean.getBarrio(),
                        responsableBean.getCalle(), responsableBean.getCodPostal(), responsableBean.getDepto(), responsableBean.getNumero(),
                        responsableBean.getPiso(), empresaBean.getFechaContrato(), empresaBean.getTituloContrato().toUpperCase(),
                        empresaBean.getPlazoContrato().toUpperCase(), empresaBean.getTipoPlazoContrato().toUpperCase(), empresaBean.getPeriodoCertificacionContrato().toUpperCase(),
                        empresaBean.getObservacionesContrato().toUpperCase(), geolocalizacionBean.getCalle().toUpperCase(), geolocalizacionBean.getNroCalle().trim(),
                        geolocalizacionBean.getBarrio().toUpperCase(), geolocalizacionBean.getIdLocalidad(), geolocalizacionBean.getLatitud(), geolocalizacionBean.getLongitud(),
                        geolocalizacionBean.getZoom(), geolocalizacionBean.getIdLocalidadEnc(), geolocalizacionBean.getIdPaisEnc());

                this.setAgregarObra(false);
                context.addMessage(null, new FacesMessage("Obra modificada con exito", ""));
                return null;
            } else {
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "La fecha de finalización de obra debe ser mayor que la fecha de inicio", ""));
                this.setTabEmpresaDesactivo(true);
                this.setTabEncargadoDesactivo(true);
                this.setTabObraDesactivo(false);
                this.setTabSeleccionado("obra");
                return null;
            }
        } else {
            this.setNombre("");
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ya existe un Obra Publica con ese codigo", ""));
            this.setTabEmpresaDesactivo(true);
            this.setTabEncargadoDesactivo(true);
            this.setTabObraDesactivo(false);
            this.setTabSeleccionado("obra");
            return null;
        }
    }

    /**
     *
     * @param e
     */
    public void verObraPublicaOyente(ActionEvent e) {
        Integer atributoId = (Integer) e.getComponent().getAttributes().get("idVer");
        this.setId(atributoId.intValue());
        String atributoTab = (String) e.getComponent().getAttributes().get("tabSeleccionado");
        this.setTabSeleccionado(atributoTab);
        Obra obra = this.gestorObraBean.encontrarObraPublicaPorId(this.getId());
        this.setAnticipoFinanciero(obra.getAnticipoFinanciero());
        this.setCodigo(obra.getCodigo());
        this.setDescripcion(obra.getDescripcion());
        if (obra.getIdEstado() != null) {
            this.setEstado(obra.getIdEstado().getNombre());
        } else {
            this.setEstado("");
        }
        this.setFechaFinEstimada(obra.getFechaFinEstimada());
        this.setFechaFinReal(obra.getFechaFinReal());
        this.setFechaInicioEstimada(obra.getFechaInicioEstimada());
        this.setFechaInicioReal(obra.getFechaInicioReal());
        this.setId(obra.getId());
        if (obra.getIdModalidadContratacion() != null) {
            this.setModalidadContratacion(obra.getIdModalidadContratacion().getNombre());
        } else {
            this.setModalidadContratacion("");
        }
        this.setMontoTotal(obra.getMontoTotal());
        this.setNombre(obra.getNombre());
        this.setNumeroExpediente(obra.getNumeroExpediente());
        this.setObservaciones(obra.getObservaciones());
        this.setNroResolucion(obra.getNroResolucion());
        this.setFondos(obra.getFondos());
        if (obra.getIdPrograma() != null) {
            this.setPrograma(obra.getIdPrograma().getNombre());
        } else {
            this.setPrograma("");
        }

        if (obra.getIdTipoObra() != null) {
            this.setTipoObra(obra.getIdTipoObra().getNombre());
            this.setIdTipoObra(obra.getIdTipoObra().getId());
        } else {
            this.setTipoObra("");
            this.setIdTipoObra(-1);
        }

        if (obra.getIdSubtipoObra() != null) {
            this.setSubtipoObra(obra.getIdSubtipoObra().getNombre());
            this.setIdSubtipoObra(obra.getIdSubtipoObra().getId());
        } else {
            this.setSubtipoObra("");
            this.setIdSubtipoObra(-1);
        }

        FacesContext context = FacesContext.getCurrentInstance();
        ResponsableObraBean responsableBean = (ResponsableObraBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "ResponsableObraBean");
        EmpresaBean empresaBean = (EmpresaBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "EmpresaBean");
        GeolocalizacionBean geolocalizacionBean = (GeolocalizacionBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "GeolocalizacionBean");
        FotoBean fotoBean = (FotoBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "FotoBean");
        fotoBean.setIdObra(this.id);
        ProgramacionBean programacionBean = (ProgramacionBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "ProgramacionBean");
        programacionBean.setIdObra(this.id);
        CertificadoBean certificadoBean = (CertificadoBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "CertificadoBean");
        certificadoBean.setIdObra(this.id);
        PagosBean pagoBean = (PagosBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "PagosBean");
        pagoBean.setIdObra(this.id);
        int idEmpresa = obra.getIdEmpresa().getId();
        programacionBean.setIdEmpresaContratista(idEmpresa);
        certificadoBean.setIdEmpresaContratista(idEmpresa);
        pagoBean.setIdEmpresaContratista(idEmpresa);
        fotoBean.setIdEmpresaContratista(idEmpresa);

        responsableBean.setId(obra.getIdResponsable().getId());
        responsableBean.setNombre(obra.getIdResponsable().getNombre());
        responsableBean.setApellido(obra.getIdResponsable().getApellido());

        responsableBean.setBarrio(obra.getIdResponsable().getIdDomicilio().getBarrio());
        responsableBean.setCalle(obra.getIdResponsable().getIdDomicilio().getCalle());
        responsableBean.setCodPostal(obra.getIdResponsable().getIdDomicilio().getCodPostal());
        responsableBean.setDepto(obra.getIdResponsable().getIdDomicilio().getDepto());
        responsableBean.setIdDomicilio(obra.getIdResponsable().getIdDomicilio().getId());
        responsableBean.setNumero(obra.getIdResponsable().getIdDomicilio().getNumero());
        responsableBean.setPiso(obra.getIdResponsable().getIdDomicilio().getPiso());
        if (obra.getIdResponsable().getIdDomicilio().getIdLocalidad() != null) {
            responsableBean.setIdLocalidad(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getId());
            responsableBean.setLocalidad(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getNombre());
            geolocalizacionBean.setIdLocalidadEnc(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getId());
            geolocalizacionBean.setLocalidadEnc(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getNombre());
            responsableBean.setIdDepartamento(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getId());
            geolocalizacionBean.setIdDepartamentoEnc(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getId());
            responsableBean.setDepartamento(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getNombre());
            geolocalizacionBean.setDepartamentoEnc(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getNombre());
            responsableBean.setIdProvincia(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getIdProvincia().getId());
            geolocalizacionBean.setIdProvinciaEnc(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getIdProvincia().getId());
            responsableBean.setProvincia(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getIdProvincia().getNombre());
            geolocalizacionBean.setProvinciaEnc(obra.getIdResponsable().getIdDomicilio().getIdLocalidad().getIdDepartamento().getIdProvincia().getNombre());
            responsableBean.setIdPais(obra.getIdResponsable().getIdDomicilio().getIdPais().getId());
            responsableBean.setPais(obra.getIdResponsable().getIdDomicilio().getIdPais().getNombre());
            geolocalizacionBean.setIdPaisEnc(obra.getIdResponsable().getIdDomicilio().getIdPais().getId());
            geolocalizacionBean.setPaisEnc(obra.getIdResponsable().getIdDomicilio().getIdPais().getNombre());

        } else {
            responsableBean.setIdLocalidad(-1);
            geolocalizacionBean.setIdLocalidadEnc(-1);
            geolocalizacionBean.setLocalidadEnc("");
            responsableBean.setLocalidad("");
            responsableBean.setIdDepartamento(-1);
            geolocalizacionBean.setIdDepartamentoEnc(-1);
            responsableBean.setDepartamento("");
            geolocalizacionBean.setDepartamentoEnc("");
            responsableBean.setIdProvincia(-1);
            geolocalizacionBean.setIdProvinciaEnc(-1);
            responsableBean.setProvincia("");
            geolocalizacionBean.setProvinciaEnc("");
            responsableBean.setIdPais(-1);
            responsableBean.setPais("");
            geolocalizacionBean.setIdPaisEnc(-1);
            geolocalizacionBean.setPaisEnc("");

        }

       
        if (obra.getIdResponsable().getIdTipoDocumento() != null) {
            responsableBean.setNumeroDocumento(obra.getIdResponsable().getNumeroDocumento());
            responsableBean.setTipoDocumento(obra.getIdResponsable().getIdTipoDocumento().getTipo());
        } else {
            responsableBean.setNumeroDocumento(0);
            responsableBean.setTipoDocumento("DNI");
        }

        empresaBean.setId(obra.getIdEmpresa().getId());
        empresaBean.setCuit(obra.getIdEmpresa().getCuit());
        empresaBean.setEmail(obra.getIdEmpresa().getEmail());
        empresaBean.setPaginaWeb(obra.getIdEmpresa().getPaginaWeb());
        empresaBean.setTelefono(obra.getIdEmpresa().getTelefono());
        empresaBean.setId(obra.getIdEmpresa().getId());
        empresaBean.setRazonSocial(obra.getIdEmpresa().getRazonSocial());
        empresaBean.setIdDomicilio(obra.getIdEmpresa().getIdDomicilio().getId());

        empresaBean.setBarrio(obra.getIdEmpresa().getIdDomicilio().getBarrio());
        empresaBean.setCalle(obra.getIdEmpresa().getIdDomicilio().getCalle());
        empresaBean.setCodPostal(obra.getIdEmpresa().getIdDomicilio().getCodPostal());
        empresaBean.setDepto(obra.getIdEmpresa().getIdDomicilio().getDepto());
        empresaBean.setNumero(obra.getIdEmpresa().getIdDomicilio().getNumero());
        empresaBean.setPiso(obra.getIdEmpresa().getIdDomicilio().getPiso());
        Contrato contr = this.gestorObraBean.encontrarContratoPorEmpresa(empresaBean.getId(), this.getId());
        if (contr != null) {
            empresaBean.setTituloContrato(contr.getTitulo().toUpperCase());
            empresaBean.setPlazoContrato(contr.getPlazo().toUpperCase());
            empresaBean.setTipoPlazoContrato(contr.getTipoPlazo().toUpperCase());
            empresaBean.setFechaContrato(contr.getFecha());
            empresaBean.setIdContrato(contr.getId());
            empresaBean.setObservacionesContrato(contr.getObservaciones().toUpperCase());
            if (contr.getIdPeriodoCertificacion() != null) {
                empresaBean.setPeriodoCertificacionContrato(contr.getIdPeriodoCertificacion().getNombre().toUpperCase());
            } else {
                empresaBean.setPeriodoCertificacionContrato("");
            }
        } else {
            empresaBean.setTituloContrato("");
            empresaBean.setPlazoContrato("");
            empresaBean.setTipoPlazoContrato("DIAS");
            empresaBean.setFechaContrato(null);
            empresaBean.setObservacionesContrato("");
            empresaBean.setPeriodoCertificacionContrato("");
        }

        if (obra.getIdEmpresa().getIdPais() != null) {
            empresaBean.setPais(obra.getIdEmpresa().getIdPais().getNombre());
        } else {
            empresaBean.setPais("");
        }

        if (obra.getIdLocalizacion() != null) {
            geolocalizacionBean.setLatitud(obra.getIdLocalizacion().getLatitud());
            geolocalizacionBean.setLongitud(obra.getIdLocalizacion().getLongitud());
            geolocalizacionBean.setBarrio(obra.getIdLocalizacion().getBarrio());
            geolocalizacionBean.setCalle(obra.getIdLocalizacion().getCalle());
            geolocalizacionBean.setNroCalle(obra.getIdLocalizacion().getNumero());
            geolocalizacionBean.setPais(obra.getIdLocalizacion().getIdLocalidad().getIdDepartamento().getIdProvincia().getIdPais().getNombre());
            geolocalizacionBean.setIdPais(obra.getIdLocalizacion().getIdLocalidad().getIdDepartamento().getIdProvincia().getIdPais().getId());
            geolocalizacionBean.setProvincia(obra.getIdLocalizacion().getIdLocalidad().getIdDepartamento().getIdProvincia().getNombre());
            geolocalizacionBean.setIdProvincia(obra.getIdLocalizacion().getIdLocalidad().getIdDepartamento().getIdProvincia().getId());
            geolocalizacionBean.setDepartamento(obra.getIdLocalizacion().getIdLocalidad().getIdDepartamento().getNombre());
            geolocalizacionBean.setIdDepartamento(obra.getIdLocalizacion().getIdLocalidad().getIdDepartamento().getId());
            geolocalizacionBean.setLocalidad(obra.getIdLocalizacion().getIdLocalidad().getNombre());
            geolocalizacionBean.setIdLocalidad(obra.getIdLocalizacion().getIdLocalidad().getId());
            geolocalizacionBean.setZoom(obra.getIdLocalizacion().getZoom());
            geolocalizacionBean.setTipoGeocoding("geodirecto");
        } else {
            geolocalizacionBean.setBarrio("");
            geolocalizacionBean.setCalle("");
            geolocalizacionBean.setNroCalle("");
            geolocalizacionBean.setLocalidad("");
            geolocalizacionBean.setIdLocalidad(-1);
            geolocalizacionBean.setDepartamento("");
            geolocalizacionBean.setIdDepartamento(-1);
            geolocalizacionBean.setProvincia("");
            geolocalizacionBean.setIdProvincia(-1);
            geolocalizacionBean.setPais("");
            geolocalizacionBean.setIdPais(-1);
            geolocalizacionBean.setLatitud("-31.409912194070973");
            geolocalizacionBean.setLongitud("-64.2041015625");
            geolocalizacionBean.setZoom(5);
            geolocalizacionBean.setTipoGeocoding("geodirecto");
        }
    }

    /**
     *
     * @return
     */
    public String filtrarObrasPublicas() {
        FacesContext context = FacesContext.getCurrentInstance();
        EmpresaBean empresaBean = (EmpresaBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "EmpresaBean");
        Float monto;
        if (this.montoParaFiltro != null) {
            if (!this.montoParaFiltro.equals("")) {
                monto = new Float(this.montoParaFiltro.trim());
            } else {
                monto = null;
            }
        } else {
            monto = null;
        }
        this.obrasPublicasFiltradas = this.gestorConsultaObraBean.filtrarObrasPublicas(this.fechaInicioReal,
                this.fechaFinReal,
                null,
                empresaBean.getRazonSocial().toUpperCase(),
                this.programa.toUpperCase(),
                monto,
                this.nombre.toUpperCase(),
                this.tipoObra.toUpperCase(),
                this.subtipoObra.toUpperCase());
        ////////////////////////////////
        this.obrasPublicasFiltradasPorNombre = this.obrasPublicasFiltradas;
        ////////////////////////////////
        this.filtroAplicado = true;
        return null;
    }

    /**
     *
     * @return
     */
    public String filtrarObrasPublicasPorNombre() {
        this.obrasPublicasFiltradasPorNombre = this.gestorConsultaObraBean.filtrarObrasPublicasPorNombre(nombre.toUpperCase().trim());
        this.filtroAplicadoPorNombre = true;
        return null;
    }

    /**
     *
     * @param e
     */
    public void obrasPublicasOyente(ActionEvent e) {
        FacesContext context = FacesContext.getCurrentInstance();
        EmpresaBean empresaBean = (EmpresaBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "EmpresaBean");
        empresaBean.setRazonSocial("");
        this.fechaFinEstimada = null;
        this.fechaInicioEstimada = null;
        this.fechaInicioReal = null;
        this.fechaFinReal = null;
        this.programa = "";
        this.montoParaFiltro = "";
        this.nombre = "";
        this.tipoObra = "";
        this.subtipoObra = "";
        this.filtroAplicado = false;
        this.filtroAplicadoPorNombre = false;

    }

    /**
     *
     * @param e
     */
    public void empresaSeleccionada(ValueChangeEvent e) {
        FacesContext context = FacesContext.getCurrentInstance();
        EmpresaBean empresaBean = (EmpresaBean) context.getELContext().getELResolver().getValue(context.getELContext(), null, "EmpresaBean");

        String razon = (String) e.getNewValue();
        EmpresaContratista empresa = this.gestorObraBean.encontrarEmpresa(razon.toUpperCase());
        if (empresa != null) {
            empresaBean.setBarrio(empresa.getIdDomicilio().getBarrio());
            empresaBean.setCalle(empresa.getIdDomicilio().getCalle());
            empresaBean.setCodPostal(empresa.getIdDomicilio().getCodPostal());
            empresaBean.setCuit(empresa.getCuit());
            empresaBean.setDepto(empresa.getIdDomicilio().getDepto());
            empresaBean.setEmail(empresa.getEmail());
            empresaBean.setPaginaWeb(empresa.getPaginaWeb());
            empresaBean.setTelefono(empresa.getTelefono());
            empresaBean.setId(empresa.getId());
            empresaBean.setIdDomicilio(empresa.getIdDomicilio().getId());
            empresaBean.setNumero(empresa.getIdDomicilio().getNumero());
            empresaBean.setPais(empresa.getIdPais().getNombre());
            empresaBean.setPiso(empresa.getIdDomicilio().getPiso());
            empresaBean.setRazonSocial(empresa.getRazonSocial());
            Contrato contr = this.gestorObraBean.encontrarContratoPorEmpresa(empresa.getId(), this.getId());
            if (contr != null) {
                empresaBean.setIdContrato(contr.getId());
                empresaBean.setTituloContrato(contr.getTitulo());
                empresaBean.setPlazoContrato(contr.getPlazo());
                empresaBean.setTipoPlazoContrato(contr.getTipoPlazo());
                empresaBean.setFechaContrato(contr.getFecha());
                empresaBean.setObservacionesContrato(contr.getObservaciones());
                empresaBean.setPeriodoCertificacionContrato(contr.getIdPeriodoCertificacion().getNombre());
            } else {
                empresaBean.setPlazoContrato("");
                empresaBean.setTipoPlazoContrato("DIAS");
                empresaBean.setTituloContrato("");
                empresaBean.setFechaContrato(null);
                empresaBean.setObservacionesContrato("");
                empresaBean.setPeriodoCertificacionContrato("");
            }
        } else {
            empresaBean.setBarrio("");
            empresaBean.setCalle("");
            empresaBean.setCodPostal("");
            empresaBean.setCuit("");
            empresaBean.setDepto("");
            empresaBean.setEmail("");
            empresaBean.setPaginaWeb("");
            empresaBean.setTelefono("");
            empresaBean.setNumero("");
            empresaBean.setPais("");
            empresaBean.setPiso(0);
            empresaBean.setRazonSocial("");
            empresaBean.setPlazoContrato("");
            empresaBean.setTipoPlazoContrato("DIAS");
            empresaBean.setFechaContrato(null);
            empresaBean.setObservacionesContrato("");
            empresaBean.setPeriodoCertificacionContrato("");
        }
    }

    /**
     *
     * @param e
     */
    public void tipoObraSeleccionada(ValueChangeEvent e) {
        String nombreTipo = (String) e.getNewValue();
        this.setSubtiposObra(this.gestorObraBean.subtiposPorTipoObra(nombreTipo));
        this.setSubtipoObra("");
    }

    /***
     * 
     * @param e
     */
    public void eliminarObraOyente(ActionEvent e) {
        UIParameter component = (UIParameter) e.getComponent().findComponent("idEliminar");
        this.setId((Integer) Integer.parseInt(component.getValue().toString()));
    }

    /**
     *
     * @return
     */
    public String eliminarObra() {
        FacesContext context = FacesContext.getCurrentInstance();

        try {
            this.gestorObraBean.eliminarObra(id);
            context.addMessage(null, new FacesMessage("Obra eliminada con exito", ""));
        } catch (Exception e) {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se pudo eliminar la Obra", ""));
        }
        return null;
    }

    /**
     * @return the tabSeleccionado
     */
    public String getTabSeleccionado() {
        return tabSeleccionado;
    }

    /**
     * @param tabSeleccionado the tabSeleccionado to set
     */
    public void setTabSeleccionado(String tabSeleccionado) {
        this.tabSeleccionado = tabSeleccionado;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the codigo
     */
    public String getCodigo() {
        return codigo;
    }

    /**
     * @param codigo the codigo to set
     */
    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the fechaInicioEstimada
     */
    public Date getFechaInicioEstimada() {
        return fechaInicioEstimada;
    }

    /**
     * @param fechaInicioEstimada the fechaInicioEstimada to set
     */
    public void setFechaInicioEstimada(Date fechaInicioEstimada) {
        this.fechaInicioEstimada = fechaInicioEstimada;
    }

    /**
     * @return the fechaInicioReal
     */
    public Date getFechaInicioReal() {
        return fechaInicioReal;
    }

    /**
     * @param fechaInicioReal the fechaInicioReal to set
     */
    public void setFechaInicioReal(Date fechaInicioReal) {
        this.fechaInicioReal = fechaInicioReal;
    }

    /**
     * @return the fechaFinEstimada
     */
    public Date getFechaFinEstimada() {
        return fechaFinEstimada;
    }

    /**
     * @param fechaFinEstimada the fechaFinEstimada to set
     */
    public void setFechaFinEstimada(Date fechaFinEstimada) {
        this.fechaFinEstimada = fechaFinEstimada;
    }

    /**
     * @return the fechaFinReal
     */
    public Date getFechaFinReal() {
        return fechaFinReal;
    }

    /**
     * @param fechaFinReal the fechaFinReal to set
     */
    public void setFechaFinReal(Date fechaFinReal) {
        this.fechaFinReal = fechaFinReal;
    }

    /**
     * @return the numeroExpediente
     */
    public int getNumeroExpediente() {
        return numeroExpediente;
    }

    /**
     * @param numeroExpediente the numeroExpediente to set
     */
    public void setNumeroExpediente(int numeroExpediente) {
        this.numeroExpediente = numeroExpediente;
    }

    /**
     * @return the descripcion
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * @param descripcion the descripcion to set
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * @return the montoTotal
     */
    public BigDecimal getMontoTotal() {
        return montoTotal;
    }

    /**
     * @param montoTotal the montoTotal to set
     */
    public void setMontoTotal(BigDecimal montoTotal) {
        this.montoTotal = montoTotal;
    }

    /**
     * @return the anticipoFinanciero
     */
    public BigDecimal getAnticipoFinanciero() {
        return anticipoFinanciero;
    }

    /**
     * @param anticipoFinanciero the anticipoFinanciero to set
     */
    public void setAnticipoFinanciero(BigDecimal anticipoFinanciero) {
        this.anticipoFinanciero = anticipoFinanciero;
    }

    /**
     * @return the observaciones
     */
    public String getObservaciones() {
        return observaciones;
    }

    /**
     * @param observaciones the observaciones to set
     */
    public void setObservaciones(String observaciones) {
        this.observaciones = observaciones;
    }

    /**
     * @return the tabObraDesactivo
     */
    public boolean isTabObraDesactivo() {
        return tabObraDesactivo;
    }

    /**
     * @param tabObraDesactivo the tabObraDesactivo to set
     */
    public void setTabObraDesactivo(boolean tabObraDesactivo) {
        this.tabObraDesactivo = tabObraDesactivo;
    }

    /**
     * @return the tabEmpresaDesactivo
     */
    public boolean isTabEmpresaDesactivo() {
        return tabEmpresaDesactivo;
    }

    /**
     * @param tabEmpresaDesactivo the tabEmpresaDesactivo to set
     */
    public void setTabEmpresaDesactivo(boolean tabEmpresaDesactivo) {
        this.tabEmpresaDesactivo = tabEmpresaDesactivo;
    }

    /**
     * @return the tabEncargadoDesactivo
     */
    public boolean isTabEncargadoDesactivo() {
        return tabEncargadoDesactivo;
    }

    /**
     * @param tabEncargadoDesactivo the tabEncargadoDesactivo to set
     */
    public void setTabEncargadoDesactivo(boolean tabEncargadoDesactivo) {
        this.tabEncargadoDesactivo = tabEncargadoDesactivo;
    }

    /**
     * @return the tabGeoDesactivo
     */
    public boolean isTabGeoDesactivo() {
        return tabGeoDesactivo;
    }

    /**
     * @param tabGeoDesactivo the tabGeoDesactivo to set
     */
    public void setTabGeoDesactivo(boolean tabGeoDesactivo) {
        this.tabGeoDesactivo = tabGeoDesactivo;
    }

    /**
     * @return the estado
     */
    public String getEstado() {
        return estado;
    }

    /**
     * @param estado the estado to set
     */
    public void setEstado(String estado) {
        this.estado = estado;
    }

    /**
     * @return the modalidadContratacion
     */
    public String getModalidadContratacion() {
        return modalidadContratacion;
    }

    /**
     * @param modalidadContratacion the modalidadContratacion to set
     */
    public void setModalidadContratacion(String modalidadContratacion) {
        this.modalidadContratacion = modalidadContratacion;
    }

    /**
     *
     * @return
     */
    public List<String> getModalidadesContratacion() {
        return (List<String>) this.gestorObraBean.modalidadesContratacion();
    }

    /**
     * @return the programa
     */
    public String getPrograma() {
        return programa;
    }

    /**
     * @param programa the programa to set
     */
    public void setPrograma(String programa) {
        this.programa = programa;
    }

    /**
     *
     * @return
     */
    public List<String> getProgramas() {
        return this.gestorProgramaBean.programas();
    }

    /**
     * @return the tipoObra
     */
    public String getTipoObra() {
        return tipoObra;
    }

    /**
     * @param tipoObra the tipoObra to set
     */
    public void setTipoObra(String tipoObra) {
        this.tipoObra = tipoObra;
    }

    /**
     *
     * @return
     */
    public List<String> getTiposObra() {
        return this.gestorTipoObraBean.tiposObra();
    }

    /**
     *
     * @param evento
     * @return
     */
    public List<datos.Localidad> autocompletadoSubtiposObra(Object evento) {
        String preferencia = evento.toString();
        return this.gestorTipoObraBean.encontrarSubtiposPorNombre(preferencia.toUpperCase().trim() + "%");
    }

    /**
     *
     * @return
     */
    public List<String> getEmpresasContratistas() {
        return (List<String>) this.gestorObraBean.empresasContratistas();
    }

    /**
     *
     * @return
     */
    public List getObrasPublicas() {
        if (!this.filtroAplicado) {
            return this.gestorObraBean.consultarObras();
        } else {
            return this.obrasPublicasFiltradas;
        }
    }

    /**
     * @return the montoParaFiltro
     */
    public String getMontoParaFiltro() {
        return montoParaFiltro;
    }

    /**
     * @param montoParaFiltro the montoParaFiltro to set
     */
    public void setMontoParaFiltro(String montoParaFiltro) {
        this.montoParaFiltro = montoParaFiltro;
    }

    /**
     * @return the obrasPublicasFiltradas
     */
    public List getObrasPublicasFiltradas() {
        if (!filtroAplicado) {
            this.obrasPublicasFiltradas = this.gestorObraBean.consultarObras();
        }
        return this.obrasPublicasFiltradas;
    }

    /**
     *
     * @return
     */
    public List<String> getObras() {
        return (List<String>) this.gestorObraBean.obras();
    }

    /**
     * @param obrasPublicasFiltradas the obrasPublicasFiltradas to set
     */
    public void setObrasPublicasFiltradas(List obrasPublicasFiltradas) {
        this.obrasPublicasFiltradas = obrasPublicasFiltradas;
    }

    /**
     * @return the filtroAplicado
     */
    public boolean isFiltroAplicado() {
        return filtroAplicado;
    }

    /**
     * @param filtroAplicado the filtroAplicado to set
     */
    public void setFiltroAplicado(boolean filtroAplicado) {
        this.filtroAplicado = filtroAplicado;
    }

    /**
     * @return the filtroAplicadoPorNombre
     */
    public boolean isFiltroAplicadoPorNombre() {
        return filtroAplicadoPorNombre;
    }

    /**
     * @param filtroAplicadoPorNombre the filtroAplicadoPorNombre to set
     */
    public void setFiltroAplicadoPorNombre(boolean filtroAplicadoPorNombre) {
        this.filtroAplicadoPorNombre = filtroAplicadoPorNombre;
    }

    /**
     * @return the obrasPublicasFiltradasPorNombre
     */
    public List getObrasPublicasFiltradasPorNombre() {
        if (!filtroAplicadoPorNombre) {
            this.obrasPublicasFiltradasPorNombre = this.gestorObraBean.consultarObras();
        }
        return this.obrasPublicasFiltradasPorNombre;
    }

    /**
     * @param obrasPublicasFiltradasPorNombre the obrasPublicasFiltradasPorNombre to set
     */
    public void setObrasPublicasFiltradasPorNombre(List obrasPublicasFiltradasPorNombre) {
        this.obrasPublicasFiltradasPorNombre = obrasPublicasFiltradasPorNombre;
    }

    /**
     *
     * @return
     */
    public String getAlerta() {
        return alerta;
    }

    /**
     *
     */
    public void alertas() {
        Programacion p = this.gestorProgramacionBean.programacionObra(id);
        if (p != null) {
            this.setAlerta(p.getAlerta());
        } else {
            this.setAlerta("ROJO");
        }

    }

    /**
     * @param alerta the alerta to set
     */
    public void setAlerta(String alerta) {
        this.alerta = alerta;
    }

    /**
     * @return the nroResolucion
     */
    public String getNroResolucion() {
        return nroResolucion;
    }

    /**
     * @param nroResolucion the nroResolucion to set
     */
    public void setNroResolucion(String nroResolucion) {
        this.nroResolucion = nroResolucion;
    }

    /**
     * @return the fondos
     */
    public String getFondos() {
        return fondos;
    }

    /**
     * @param fondos the fondos to set
     */
    public void setFondos(String fondos) {
        this.fondos = fondos;
    }

    /**
     * @return the subtipoObra
     */
    public String getSubtipoObra() {
        return subtipoObra;
    }

    /**
     * @param subtipoObra the subtipoObra to set
     */
    public void setSubtipoObra(String subtipoObra) {
        this.subtipoObra = subtipoObra;
    }

    /**
     * @return the idTipoObra
     */
    public int getIdTipoObra() {
        return idTipoObra;
    }

    /**
     * @param idTipoObra the idTipoObra to set
     */
    public void setIdTipoObra(int idTipoObra) {
        this.idTipoObra = idTipoObra;
    }

    /**
     * @return the idSubtipoObra
     */
    public int getIdSubtipoObra() {
        return idSubtipoObra;
    }

    /**
     * @param idSubtipoObra the idSubtipoObra to set
     */
    public void setIdSubtipoObra(int idSubtipoObra) {
        this.idSubtipoObra = idSubtipoObra;
    }

    /**
     * @return the subtiposObra
     */
    public List<String> getSubtiposObra() {
        return subtiposObra;
    }

    /**
     * @param subtiposObra the subtiposObra to set
     */
    public void setSubtiposObra(List<String> subtiposObra) {
        this.subtiposObra = subtiposObra;
    }

    /**
     * @return the tabFotosDesactivo
     */
    public boolean isTabFotosDesactivo() {
        return tabFotosDesactivo;
    }

    /**
     * @param tabFotosDesactivo the tabFotosDesactivo to set
     */
    public void setTabFotosDesactivo(boolean tabFotosDesactivo) {
        this.tabFotosDesactivo = tabFotosDesactivo;
    }

    /**
     * @return the tabProgramacionDesactivo
     */
    public boolean isTabProgramacionDesactivo() {
        return tabProgramacionDesactivo;
    }

    /**
     * @param tabProgramacionDesactivo the tabProgramacionDesactivo to set
     */
    public void setTabProgramacionDesactivo(boolean tabProgramacionDesactivo) {
        this.tabProgramacionDesactivo = tabProgramacionDesactivo;
    }

    /**
     * @return the agregarObra
     */
    public boolean isAgregarObra() {
        return agregarObra;
    }

    /**
     * @param agregarObra the agregarObra to set
     */
    public void setAgregarObra(boolean agregarObra) {
        this.agregarObra = agregarObra;
    }

    /**
     * @return the tabCertificadosDesactivo
     */
    public boolean isTabCertificadosDesactivo() {
        return tabCertificadosDesactivo;
    }

    /**
     * @param tabCertificadosDesactivo the tabCertificadosDesactivo to set
     */
    public void setTabCertificadosDesactivo(boolean tabCertificadosDesactivo) {
        this.tabCertificadosDesactivo = tabCertificadosDesactivo;
    }

    /**
     * @return the tabPagosDesactivo
     */
    public boolean isTabPagosDesactivo() {
        return tabPagosDesactivo;
    }

    /**
     * @param tabPagosDesactivo the tabPagosDesactivo to set
     */
    public void setTabPagosDesactivo(boolean tabPagosDesactivo) {
        this.tabPagosDesactivo = tabPagosDesactivo;
    }
}
